///************************************************************************
/// <copyrigth>2018-2019 Corporation.All Rights Reserved</copyrigth>
/// <author>tangyingzhong</author>
/// <contact>tangyz114987@outlook.com</contact>
/// <version>v1.0.0</version>
/// <describe>
/// It is a hard video decoder
///</describe>
/// <date>2021/6/26</date>
///***********************************************************************
#ifndef IVIDEOHARDDECODER_H
#define IVIDEOHARDDECODER_H

#include <string>
#include "Model/Video/VideoDecoder/IVideoDecoder.h"

class IVideoHardDecoder
{
public:
	// Detructe the IVideoHardDecoder
	virtual ~IVideoHardDecoder() {	}

public:
	// Init the decoder
	virtual bool Init(VideoTypeEnum eVideoType, void* pWindowHandle) = 0;

	// Excute the decoding
	virtual bool Excute(uint8_t* pSrcData, 
		int iSrcSize, 
		uint8_t* pDst, 
		int& iDstSize,
		int& iFrameWidth,
		int& iFrameHeight) = 0;

	// Flush the decode at the last frame decoding
	virtual void Flush() = 0;

	// Is current system support hard decoder
	virtual bool IsSupportHardDecode(VideoTypeEnum eVideoType) = 0;
};

#endif // IVIDEOHARDDECODER_H
